Part 0: Load needed libraries and the dataset

library(rvest)
library(tibble)
library(tidyverse)
library(ggplot2)
library(qdap)
library(sentimentr)
library(gplots)
library(hrbrthemes)
library(tm)
library(syuzhet)
library(factoextra)
library(beeswarm)
library(scales)
library(RColorBrewer)
library(RANN)
library(topicmodels)
library(wordcloud)
library(tidytext)
library(knitr)
library(DT)
library(plotly)

philosophy_data <- read_csv("philosophy_data.csv",col_types = cols())

The School of Athens The School of Athens [4]

Part 1: Data Exploration

The dataset used in this project contains over 360,000 sentences from over 50 texts spanning 13 major schools of the history of philosophy. The represented schools are: Plato, Aristotle, Empiricism, Rationalism, Analytic, Continental, Phenomenology, German Idealism, Communism, Capitalism, Stoicism, Nietzsche, and Feminism. Besides, there are 36 represented authors from each school, such as Epictetus from Stoicism or Marx from Communism.

dim(philosophy_data)
## [1] 360808     11
datatable(head(philosophy_data,n=500), 
          options = list(pageLength = 3, scrollX = TRUE, scrollCollapse = TRUE, searching = FALSE))
unique(philosophy_data$school)
##  [1] "plato"           "aristotle"       "empiricism"      "rationalism"    
##  [5] "analytic"        "continental"     "phenomenology"   "german_idealism"
##  [9] "communism"       "capitalism"      "stoicism"        "nietzsche"      
## [13] "feminism"
unique(philosophy_data$author)
##  [1] "Plato"           "Aristotle"       "Locke"           "Hume"           
##  [5] "Berkeley"        "Spinoza"         "Leibniz"         "Descartes"      
##  [9] "Malebranche"     "Russell"         "Moore"           "Wittgenstein"   
## [13] "Lewis"           "Quine"           "Popper"          "Kripke"         
## [17] "Foucault"        "Derrida"         "Deleuze"         "Merleau-Ponty"  
## [21] "Husserl"         "Heidegger"       "Kant"            "Fichte"         
## [25] "Hegel"           "Marx"            "Lenin"           "Smith"          
## [29] "Ricardo"         "Keynes"          "Epictetus"       "Marcus Aurelius"
## [33] "Nietzsche"       "Wollstonecraft"  "Beauvoir"        "Davis"

Based on the above data exploration, I noticed that this is a rich dataset of philosophical sentences spanning from 350 BC to modern 1985 AD. Given such a long time span, I became interested in whether the social change had any impact on the development of the history of philosophy.
Therefore, I made an interactive graph of the dataset in chronological order. As can be seen from the figure, I can roughly divide the period over 2300 years into three stages: (1) the first stage from 350 BC to 125 AD; (2) the second stage from 125 AD to 1637 AD; (3) the third stage from 1637 AD to 1985 AD.

timeline <- philosophy_data%>%
  group_by(original_publication_date, author) %>%
  summarise(count=n(), .groups = 'drop')

p1 <- timeline %>%
  ggplot(aes(x=original_publication_date, y=count)) +
  geom_area(fill="#69b3a2", alpha=0.5) +
  geom_line(color="#69b3a2") +
  labs(x = "Year(350BC~1985)",
       y = "Number of sentence for each author published") +
  theme_ipsum()
p1 <- ggplotly(p1)
p1

In the following pages, I will do Wordcloud and Sentiment analysis based on these three time periods, and try to answer the questions I raised from a statistical point of view.

Part 2: Data Analysis

First Stage: 350 BC ~ 125 AD

timeline1 <- philosophy_data%>%
  filter(original_publication_date<125)
timeline1_info <- timeline1%>%
  group_by(school, author) %>%
  distinct(school, author, title, original_publication_date)%>%
  arrange(original_publication_date)
kable(timeline1_info)
title author school original_publication_date
Plato - Complete Works Plato plato -350
Aristotle - Complete Works Aristotle aristotle -320
sentence.list=NULL
cols = c('title', 'author', 'school', 'sentence_str', 'original_publication_date')
for(i in 1:nrow(timeline1)){
  sentences=str_remove_all(timeline1$tokenized_txt[i], "[\\[\\],']")
  if(length(sentences)>0){
      emotions=get_nrc_sentiment(sentences)
      word.count=word_count(sentences)
        # colnames(emotions)=paste0("emo.", colnames(emotions))
        # in case the word counts are zeros?
      emotions=emotions/(word.count+0.01)
      sentence.list=rbind(sentence.list, 
                          cbind(timeline1[i,cols],
                                sentences=as.character(sentences), 
                                word.count,
                                emotions)
        )
      }
}
write.csv(sentence.list,"../output/sentiment_1.csv", row.names = TRUE, col.names = TRUE)
sentiment_1 <- read_csv("sentiment_1.csv", col_types = cols())
dim(sentiment_1)
## [1] 87145    18
sentiment_1 <- sentiment_1%>%
  filter(!is.na(word.count))%>%
  filter((anger!=0)&(anticipation!=0)&(disgust!=0)&(fear!=0)
         &(joy!=0)&(sadness!=0)&(surprise!=0)&(trust!=0)) %>%
  mutate(neutral = if_else((negative==0)&(positive==0),1,0)) %>%
  mutate(main_emotion=apply(.[c((9:16),19)], 1, function(x) names(x)[which.max(x)])) %>%
  mutate(main_attitude=apply(.[c((17:19),20)], 1, function(x) names(x)[which.max(x)])) %>%
  select(-sentences)
dim(sentiment_1)
## [1] 2217   20
head(sentiment_1)
sentiment_1%>%
  group_by(main_emotion, school) %>%
  summarize_all(n_distinct) %>%
  ggplot(aes(x=main_emotion, y = index, fill=school)) +
  geom_bar(position="dodge", stat="identity") + 
  coord_flip() +
  labs(x='Emotions',
       y='',
       title='Sentiment analysis for emotions among time period 1')

sentiment_1%>%
  filter(main_emotion=='anger') %>%
  arrange(desc(anger)) %>%
  select(author,sentence_str,main_emotion,anger)%>%
  group_by(author) %>%
  slice_head(n=2)
sentiment_1%>%
  filter(main_emotion=='trust') %>%
  arrange(desc(trust)) %>%
  select(author,sentence_str,main_emotion,trust)%>%
  group_by(author) %>%
  slice_head(n=2)
sentiment_1%>%
  group_by(main_attitude, school) %>%
  summarize_all(n_distinct) %>%
  ggplot(aes(x=school, y = index, fill=main_attitude)) +
  geom_bar(position="dodge", stat="identity") + 
  coord_flip() +
  labs(x='School',
       y='',
       title='Sentiment analysis for attitudes among time period 1')

sentiment_1%>%
  filter(main_attitude=='positive') %>%
  arrange(desc(positive)) %>%
  select(author,sentence_str,main_attitude,positive)%>%
  group_by(author) %>%
  slice_head(n=2)
sentiment_1%>%
  filter(main_attitude=='negative') %>%
  arrange(desc(negative)) %>%
  select(author,sentence_str,main_attitude,negative)%>%
  group_by(author) %>%
  slice_head(n=2)
mywords <- c('one', 'will', 'also')
sent1 <- Corpus(VectorSource(timeline1$sentence_lowered))
sent1 <- tm_map(sent1, stripWhitespace)
sent1 <- tm_map(sent1, removeNumbers)
sent1 <- tm_map(sent1, removeWords, stopwords("english"))
sent1 <- tm_map(sent1, removeWords, character(0))
sent1 <- tm_map(sent1, removePunctuation)
tdm1 <- TermDocumentMatrix(sent1)
tdm1.tidy = tidy(tdm1)
tdm1.overall=summarise(group_by(tdm1.tidy, term), sum(count))
tdm1.overall <- tdm1.overall %>%
  rename(n = 'sum(count)') %>%
  mutate(perc = n/sum(n)) %>%
  arrange(desc(n))
kable(tdm1.overall[1:20,])
term n perc
one 14282 0.0151597
will 8479 0.0090001
things 7438 0.0078951
must 6754 0.0071691
man 6087 0.0064611
also 5510 0.0058486
good 4890 0.0051905
now 4750 0.0050419
say 4719 0.0050090
thing 4541 0.0048201
said 4116 0.0043689
can 4091 0.0043424
way 3929 0.0041705
like 3790 0.0040229
just 3540 0.0037575
time 3504 0.0037193
two 3347 0.0035527
something 3317 0.0035208
another 3222 0.0034200
may 3141 0.0033340
wordcloud(tdm1.overall$term, tdm1.overall$n,
          scale=c(5,0.5),
          max.words=100,
          min.freq=10,
          random.order=FALSE,
          rot.per=0.3,
          random.color=FALSE,
          colors=brewer.pal(9,"Dark2"))

Second Stage: 125 AD ~ 1637 AD

timeline2 <- philosophy_data%>%
  filter(original_publication_date>=125 & original_publication_date<1637)
timeline2_info <- timeline2%>%
  group_by(school, author) %>%
  distinct(school, author, title, original_publication_date)%>%
  arrange(original_publication_date)
kable(timeline2_info)
title author school original_publication_date
Enchiridion Epictetus stoicism 125
Meditations Marcus Aurelius stoicism 170
sentence.list=NULL
cols = c('title', 'author', 'school', 'sentence_str', 'original_publication_date')
for(i in 1:nrow(timeline2)){
  sentences=str_remove_all(timeline2$tokenized_txt[i], "[\\[\\],']")
  if(length(sentences)>0){
      emotions=get_nrc_sentiment(sentences)
      word.count=word_count(sentences)
        # colnames(emotions)=paste0("emo.", colnames(emotions))
        # in case the word counts are zeros?
      emotions=emotions/(word.count+0.01)
      sentence.list=rbind(sentence.list, 
                          cbind(timeline2[i,cols],
                                sentences=as.character(sentences), 
                                word.count,
                                emotions)
        )
      }
}
write.csv(sentence.list,"../output/sentiment_2.csv", row.names = TRUE, col.names = TRUE)
sentiment_2 <- read_csv("sentiment_2.csv", col_types = cols())
dim(sentiment_2)
## [1] 2535   18
sentiment_2 <- sentiment_2%>%
  filter(!is.na(word.count))%>%
  filter((anger!=0)&(anticipation!=0)&(disgust!=0)&(fear!=0)
         &(joy!=0)&(sadness!=0)&(surprise!=0)&(trust!=0)) %>%
  mutate(neutral = if_else((negative==0)&(positive==0),1,0)) %>%
  mutate(main_emotion=apply(.[c((9:16),19)], 1, function(x) names(x)[which.max(x)])) %>%
  mutate(main_attitude=apply(.[c((17:19),20)], 1, function(x) names(x)[which.max(x)])) %>%
  select(-sentences)
dim(sentiment_2)
## [1] 92 20
head(sentiment_2)
sentiment_2%>%
  group_by(main_emotion, author) %>%
  summarize_all(n_distinct) %>%
  ggplot(aes(x=main_emotion, y = index, fill=author)) +
  geom_bar(position="dodge", stat="identity") + 
  coord_flip() +
  labs(x='Emotions',
       y='',
       title='Sentiment analysis for emotions among time period 2')

sentiment_2%>%
  filter(main_emotion=='anger') %>%
  arrange(desc(anger)) %>%
  select(author,sentence_str,main_emotion,anger)%>%
  group_by(author) %>%
  slice_head(n=2)
sentiment_2%>%
  filter(main_emotion=='fear') %>%
  arrange(desc(fear)) %>%
  select(author,sentence_str,main_emotion,fear)%>%
  group_by(author) %>%
  slice_head(n=2)
sentiment_2%>%
  group_by(main_attitude, author) %>%
  summarize_all(n_distinct) %>%
  ggplot(aes(x=author, y = index, fill=main_attitude)) +
  geom_bar(position="fill", stat="identity") + 
  coord_flip() +
  labs(x='Author',
       y='Percentage',
       title='Sentiment analysis for attitudes among time period 2')

sentiment_2%>%
  filter(main_attitude=='positive') %>%
  arrange(desc(positive)) %>%
  select(author,sentence_str,main_attitude,positive)%>%
  group_by(author) %>%
  slice_head(n=2)
sentiment_2%>%
  filter(main_attitude=='negative') %>%
  arrange(desc(negative)) %>%
  select(author,sentence_str,main_attitude,negative)%>%
  group_by(author) %>%
  slice_head(n=2)
sent2 <- Corpus(VectorSource(timeline2$sentence_lowered))
sent2 <- tm_map(sent2, stripWhitespace)
sent2 <- tm_map(sent2, removeNumbers)
sent2 <- tm_map(sent2, removeWords, stopwords("english"))
sent2 <- tm_map(sent2, removeWords, character(0))
sent2 <- tm_map(sent2, removePunctuation)
tdm2 <- TermDocumentMatrix(sent2)
tdm2.tidy = tidy(tdm2)
tdm2.overall=summarise(group_by(tdm2.tidy, term), sum(count))
tdm2.overall <- tdm2.overall %>%
  rename(n = 'sum(count)') %>%
  mutate(perc = n/sum(n)) %>%
  arrange(desc(n))
kable(tdm2.overall[1:20,])
term n perc
thou 798 0.0272830
things 568 0.0194195
unto 436 0.0149065
thy 338 0.0115560
one 313 0.0107012
thee 306 0.0104619
man 302 0.0103251
nature 268 0.0091627
either 251 0.0085815
doth 247 0.0084447
will 246 0.0084105
good 195 0.0066669
thyself 193 0.0065985
must 188 0.0064276
whatsoever 171 0.0058464
also 165 0.0056412
now 157 0.0053677
world 155 0.0052993
upon 153 0.0052309
can 152 0.0051968
wordcloud(tdm2.overall$term, tdm2.overall$n,
          scale=c(5,0.5),
          max.words=100,
          min.freq=10,
          random.order=FALSE,
          rot.per=0.3,
          random.color=FALSE,
          colors=brewer.pal(9,"Dark2"))

Third Stage: 1637 AD ~ 1985 AD

timeline3 <- philosophy_data%>%
  filter(original_publication_date>=1637)
timeline3_info <- timeline3%>%
  group_by(school, author) %>%
  distinct(school, author, title,original_publication_date)%>%
  arrange(original_publication_date)
kable(timeline3_info)
title author school original_publication_date
Discourse On Method Descartes rationalism 1637
Meditations On First Philosophy Descartes rationalism 1641
The Search After Truth Malebranche rationalism 1674
Ethics Spinoza rationalism 1677
On The Improvement Of Understanding Spinoza rationalism 1677
Second Treatise On Government Locke empiricism 1689
Essay Concerning Human Understanding Locke empiricism 1689
A Treatise Concerning The Principles Of Human Knowledge Berkeley empiricism 1710
Theodicy Leibniz rationalism 1710
Three Dialogues Berkeley empiricism 1713
A Treatise Of Human Nature Hume empiricism 1739
The Wealth Of Nations Smith capitalism 1776
Dialogues Concerning Natural Religion Hume empiricism 1779
Critique Of Pure Reason Kant german_idealism 1781
Critique Of Practical Reason Kant german_idealism 1788
Critique Of Judgement Kant german_idealism 1790
Vindication Of The Rights Of Woman Wollstonecraft feminism 1792
The System Of Ethics Fichte german_idealism 1798
The Phenomenology Of Spirit Hegel german_idealism 1807
Science Of Logic Hegel german_idealism 1817
On The Principles Of Political Economy And Taxation Ricardo capitalism 1817
Elements Of The Philosophy Of Right Hegel german_idealism 1820
The Communist Manifesto Marx communism 1848
Essential Works Of Lenin Lenin communism 1862
Capital Marx communism 1883
Beyond Good And Evil Nietzsche nietzsche 1886
Thus Spake Zarathustra Nietzsche nietzsche 1887
The Antichrist Nietzsche nietzsche 1888
Ecce Homo Nietzsche nietzsche 1888
Twilight Of The Idols Nietzsche nietzsche 1888
The Idea Of Phenomenology Husserl phenomenology 1907
Philosophical Studies Moore analytic 1910
The Problems Of Philosophy Russell analytic 1912
The Analysis Of Mind Russell analytic 1921
Tractatus Logico-Philosophicus Wittgenstein analytic 1921
Being And Time Heidegger phenomenology 1927
The Crisis Of The European Sciences And Phenomenology Husserl phenomenology 1936
A General Theory Of Employment, Interest, And Money Keynes capitalism 1936
The Phenomenology Of Perception Merleau-Ponty phenomenology 1945
The Second Sex Beauvoir feminism 1949
Quintessence Quine analytic 1950
On Certainty Wittgenstein analytic 1950
Off The Beaten Track Heidegger phenomenology 1950
Philosophical Investigations Wittgenstein analytic 1953
The Logic Of Scientific Discovery Popper analytic 1959
History Of Madness Foucault continental 1961
The Birth Of The Clinic Foucault continental 1963
The Order Of Things Foucault continental 1966
Writing And Difference Derrida continental 1967
Difference And Repetition Deleuze continental 1968
Naming And Necessity Kripke analytic 1972
Anti-Oedipus Deleuze continental 1972
Philosophical Troubles Kripke analytic 1975
Women, Race, And Class Davis feminism 1981
Lewis - Papers Lewis analytic 1985
timeline3 %>%
  group_by(school) %>%
  summarize(article_per_school = n_distinct(title)) %>%
  ggplot(aes(x=school, y=article_per_school)) +
  geom_bar(stat='identity', fill='blue', alpha=0.6) +
  labs(y='Number of articles', x='School') +
  theme(axis.text.x = element_text(angle = 90))

sentence.list=NULL
cols = c('title', 'author', 'school', 'sentence_str', 'original_publication_date')
for(i in 1:nrow(timeline3)){
  sentences=str_remove_all(timeline3$tokenized_txt[i], "[\\[\\],']")
  if(length(sentences)>0){
      emotions=get_nrc_sentiment(sentences)
      word.count=word_count(sentences)
        # colnames(emotions)=paste0("emo.", colnames(emotions))
        # in case the word counts are zeros?
      emotions=emotions/(word.count+0.01)
      sentence.list=rbind(sentence.list, 
                          cbind(timeline3[i,cols],
                                sentences=as.character(sentences), 
                                word.count,
                                emotions)
        )
      }
}
write.csv(sentence.list,"../output/sentiment_3.csv", row.names = TRUE, col.names = TRUE)
sentiment_3 <- read_csv("sentiment_3.csv", col_types = cols())
dim(sentiment_3)
## [1] 271128     18
sentiment_3 <- sentiment_3%>%
  filter(!is.na(word.count))%>%
  filter((anger!=0)&(anticipation!=0)&(disgust!=0)&(fear!=0)
         &(joy!=0)&(sadness!=0)&(surprise!=0)&(trust!=0)) %>%
  mutate(neutral = if_else((negative==0)&(positive==0),1,0)) %>%
  mutate(main_emotion=apply(.[c((9:16),19)], 1, function(x) names(x)[which.max(x)])) %>%
  mutate(main_attitude=apply(.[c((17:19),20)], 1, function(x) names(x)[which.max(x)])) %>%
  select(-sentences)
dim(sentiment_3)
## [1] 6717   20
head(sentiment_3)
sentiment_3%>%
  group_by(main_emotion, school) %>%
  summarize_all(n_distinct) %>%
  ggplot(aes(x=school, y = index, fill=main_emotion)) +
  geom_bar(position="dodge", stat="identity") + 
  coord_flip() +
  facet_wrap(~main_emotion) +
  ggtitle('Sentiment analysis for emotions among time period 3')

sentiment_3%>%
  filter(main_emotion=='anger') %>%
  arrange(desc(anger)) %>%
  select(school,sentence_str,main_emotion,anger)%>%
  group_by(school) %>%
  slice_head(n=2)
sentiment_3%>%
  filter(main_emotion=='trust') %>%
  arrange(desc(trust)) %>%
  select(school,sentence_str,main_emotion,trust)%>%
  group_by(school) %>%
  slice_head(n=2)
sentiment_3%>%
  group_by(main_attitude, school) %>%
  summarize_all(n_distinct) %>%
  ggplot(aes(x=school, y = index, fill=main_attitude)) +
  geom_bar(position="fill", stat="identity") + 
  coord_flip() +
  labs(x='School',
       y='Percentage',
       title='Sentiment analysis for attitudes among time period 3')

sentiment_3%>%
  filter(main_attitude=='positive') %>%
  arrange(desc(positive)) %>%
  select(school,sentence_str,main_attitude,positive)%>%
  group_by(school) %>%
  slice_head(n=2)
sentiment_3%>%
  filter(main_attitude=='negative') %>%
  arrange(desc(negative)) %>%
  select(school,sentence_str,main_attitude,negative)%>%
  group_by(school) %>%
  slice_head(n=2)
sent3 <- Corpus(VectorSource(timeline3$sentence_lowered))
sent3 <- tm_map(sent3, stripWhitespace)
sent3 <- tm_map(sent3, removeNumbers)
sent3 <- tm_map(sent3, removeWords, stopwords("english"))
sent3 <- tm_map(sent3, removeWords, character(0))
sent3 <- tm_map(sent3, removePunctuation)
tdm3 <- TermDocumentMatrix(sent3)
tdm3.tidy = tidy(tdm3)
tdm3.overall=summarise(group_by(tdm3.tidy, term), sum(count))
tdm3.overall <- tdm3.overall %>%
  rename(n = 'sum(count)') %>%
  mutate(perc = n/sum(n)) %>%
  arrange(desc(n))
kable(tdm3.overall[1:20,])
term n perc
one 31944 0.0093754
can 22441 0.0065863
will 19156 0.0056222
must 14195 0.0041662
may 13008 0.0038178
time 11626 0.0034122
even 11614 0.0034087
world 11394 0.0033441
also 11105 0.0032593
first 10714 0.0031445
nature 9670 0.0028381
things 9556 0.0028046
therefore 9389 0.0027556
without 9342 0.0027418
reason 9162 0.0026890
two 9109 0.0026735
thus 8988 0.0026379
way 8863 0.0026013
man 8671 0.0025449
now 8133 0.0023870
wordcloud(tdm3.overall$term, tdm3.overall$n,
          scale=c(5,0.5),
          max.words=100,
          min.freq=10,
          random.order=FALSE,
          rot.per=0.3,
          random.color=FALSE,
          colors=brewer.pal(9,"Dark2"))

Part 3: Conclusion

First stage: 350BC ~ 125AD

During this time period, our dataset contains the complete work of two foundational schools and their corresponding most influential author: Plato and Aristotle.

Plato’s philosophical thought is a huge system, the core of which is the “ideology theory”. In his view, the world is divided into two parts: the natural world in the senses and the supernatural world in the ideas. Because the perceived world is always changing, people’s understanding of it varies from time to time, from place to place, from person to person, so the perceived world is unreal.[1]

Aristotle’s philosophical epistemology begins with a critique of Plato’s theory of ideas. In his “Metaphysics”, he believes that the natural world is an objective and real existence, and people’s cognition comes from their sense of the objective world. Without sense, there is no knowledge.[1]

Although their philosophical thoughts are not completely similar, their status as pioneers and founders in the history of philosophy is unquestionable. It can be seen from the above sentiment analysis that the dominated emotions in the sentences of Plato and Aristotle are anger, anticipation and trust. There is no obvious positive or negative difference between the attitudes in their sentences, but both are mostly positive.

Besides, based on the wordcloud for this time period, we can find some interesting relatively high-frequency words in their sentences, such as reason, nature, animals and knowledge, which is inline with their philosophy.

Second stage: 125AD ~ 1637AD

During this time period, our dataset contains one school - Stoicism - and its corresponding two authors: Epictetus and Marcus Aurelius.

The first thing catches my attention is that although this is a time span over 1500 years, there are only two authors who were active in the 2nd century AD including in this dataset. I have two possible explanations for this: first, the lack of philosophical data during this period is due to the limitation of the dataset; second, the philosophical thought during this period in history was relatively inactive due to other factors, such as the rise of mainstream religious thought.

From the sentiment analysis of Epictetus and Marcus Aurelius, I find that anger and anticipation are the two main emotions. Significantly different from Plato and Aristotle in the first stage, in the attitude analysis of Epictetus and Marcus Aurelius, negative attitudes account for a large proportion (both greater than 60%). From the wordcloud of the second stage, the common high-frequency words that attract attention are life, world, universe and soul.

Third stage: 1637 AD ~ 1985 AD

The third time period is the closest one to us. Therefore, I expect the results to be the most understandable and familiar before the analysis.

The dataset at this stage contains 10 schools and their corresponding 32 authors. We can find that although this period is only over 300 years old, it has the most schools and authors. It seems that in this time period, mankind’s philosophical thinking has in flourished.

Combined with my knowledge of history, I think the reasons for the active development of philosophy at this stage are due to (1) the Renaissance movement, which peaked in the 16th century, and (2) the Industrial Revolution, which began in the 18th century. The Renaissance liberated the mind and liberated people from the theocracy of the Middle Ages, while the labor liberation brought about by the Industrial Revolution promoted the improvement of people’s living standards.[3] The improvement of these two aspects has led to the vigorous development of modern human civilization, which also includes philosophy.

From the sentiment analysis at this stage, I observe that anger, anticipation, fear and trust are the main emotions. Different from the second stage, the attitude analysis of the third stage pointed out that positive dominated the attitude sentiment in all 10 schools (all exceeded 50%). In the wordcloud at this stage, the interesting high-frequency words I observed are self, existence, labor and power.

In conclusion, through the above analysis, we should be able to see that behind the longriver of history of philosophy, there is the impact of social changes in general.

Part 4: Reference

[1] Bakalis, Nikolaos (2005). Handbook of Greek Philosophy: From Thales to the Stoics Analysis and Fragments, Trafford Publishing ISBN 978-1-4120-4843-9.
[2] Bury, J. B.; Meiggs, Russell (1956). A history of Greece to the death of Alexander the Great. London: Macmillan. pp. 397, 540.
[3] Pincus, Steve (2009). 1688: The First Modern Revolution (2011 ed.). Yale University Press. ISBN 978-0-300-17143-3.
[4] Raphael (1509-1511). The School of Athens.